Batch Processing হলো একটি প্রক্রিয়া যেখানে একসঙ্গে একাধিক ডাটাবেজ অপারেশন সম্পন্ন করা হয়। এটি সাধারণত বড় পরিমাণ ডেটা আপডেট, ইন্সার্ট বা ডিলিট করার জন্য ব্যবহার করা হয়। Hibernate বা Spring ORM এ Batch Processing করে ডাটাবেজ অপারেশনগুলো আরও কার্যকর এবং দ্রুত সম্পন্ন করা যায়।
প্রত্যেকটি অপারেশনের জন্য আলাদা সংযোগ না খুলে একবারে একাধিক অপারেশন চালিয়ে ডাটাবেজ লোড কমানো হয়।
একাধিক অপারেশন একত্রে প্রক্রিয়া করায় ডাটাবেজ এবং অ্যাপ্লিকেশনের মধ্যে কম সংখ্যক রিকোয়েস্ট পাঠানো হয়।
বড় ডেটা সেট নিয়ে কাজ করার সময় Batch Processing ডাটাবেসের কার্যকারিতা এবং মেমোরি ব্যবহারে সহায়তা করে।
একসঙ্গে একাধিক অপারেশন একটি ট্রানজেকশনে সম্পন্ন হওয়ায় ডেটা কনসিস্টেন্সি বজায় রাখা সহজ হয়।
Hibernate এ Batch Insert করার জন্য hibernate.jdbc.batch_size প্রোপার্টি কনফিগার করতে হবে।
hibernate.cfg.xml
<property name="hibernate.jdbc.batch_size">20</property>
EmployeeDAO.java
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
@Repository
public class EmployeeDAO {
@Autowired
private SessionFactory sessionFactory;
public void saveEmployeesInBatch(List<Employee> employees) {
Session session = sessionFactory.openSession();
session.beginTransaction();
int batchSize = 20; // Batch size
for (int i = 0; i < employees.size(); i++) {
session.save(employees.get(i));
if (i % batchSize == 0) {
session.flush(); // Flush changes to the database
session.clear(); // Clear session cache
}
}
session.getTransaction().commit();
session.close();
}
}
Spring এর JdbcTemplate ব্যবহার করে Batch Processing করা যায়।
EmployeeDAO.java
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Repository;
@Repository
public class EmployeeDAO {
@Autowired
private JdbcTemplate jdbcTemplate;
public void batchUpdateEmployees(List<Employee> employees) {
String sql = "INSERT INTO Employee (id, name, department) VALUES (?, ?, ?)";
jdbcTemplate.batchUpdate(sql, employees, 20, (ps, employee) -> {
ps.setInt(1, employee.getId());
ps.setString(2, employee.getName());
ps.setString(3, employee.getDepartment());
});
}
}
Hibernate এর মাধ্যমে Batch Delete অপারেশন করা যায়।
EmployeeDAO.java
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
@Repository
public class EmployeeDAO {
@Autowired
private SessionFactory sessionFactory;
public void deleteEmployeesInBatch(List<Integer> employeeIds) {
Session session = sessionFactory.openSession();
session.beginTransaction();
String hql = "DELETE FROM Employee WHERE id = :id";
for (int i = 0; i < employeeIds.size(); i++) {
session.createQuery(hql)
.setParameter("id", employeeIds.get(i))
.executeUpdate();
if (i % 20 == 0) { // Batch size
session.flush();
session.clear();
}
}
session.getTransaction().commit();
session.close();
}
}
Hibernate এবং Spring ORM এর মাধ্যমে Batch Processing সহজেই বাস্তবায়ন করা যায়, যা বড় অ্যাপ্লিকেশন বা ডেটা-ইনটেনসিভ প্রসেসের জন্য অপরিহার্য।
Read more